# Ruby から Erlang を扱います。

# rulang.rb をロードします。
require 'rulang'

# 同期通信
# localhost:9900 の Erlang サーバにアクセスできます。
r_erlang = RulangBridge::Rulang.new("erlang", "localhost", 9900)

# erlang:length([1,2,3,4,5,6,7,8,9]). を実行
p r_erlang.length([1,2,3,4,5,6,7,8,9])
# => 9

# erlang:length("rulang bridge!").
p r_erlang.length("rulang bridge!")
# => 14

# erl_syntax:abstract("test").
r_erl_syntax = RulangBridge::Rulang.new("erl_syntax", "localhost", 9900)
p r_erl_syntax.abstract("test")
# => ["tree", "string", ["attr", 0, [], "none"], "test"]


# 非同期通信
# 第3引数を true にすると非同期で通信できます。
ar_erlang = RulangBridge::Rulang.new("erlang", "localhost", 9900, true)
thread = ar_erlang.length([6,3,5,2,4,1], proc { |x|
	p x
	p "second"
})
p "first"
thread.join
# =>
#   first
#   8
#   second

# eval だけ使う方法
a = RulangBridge::Erlang.new("localhost", 9900)
b = eval a.eval("10*10.")
p b # => 100

# sample/quicksort.erl を Erlang でコンパイルしていないとエラーが出る
r_quicksort = RulangBridge::Rulang.new("quicksort", "localhost", 9900)
p r_quicksort.qsort("quicksort", [7,9,5,6,3,4])

